AWS CLI コマンドを利用して Windows EC2 インスタンスの EC2Rescue ログ を S3 バケットへ取得してみた

AWS CLI コマンドを利用して Windows EC2 インスタンスの EC2Rescue ログ を S3 バケットへ取得してみた

Clock Icon2024.12.04

はじめに

テクニカルサポートの 片方 です。
私が所属するチームへ Windows OS の EC2 インスタンスに関する問題が発生してお問い合わせがあった際、EC2Rescue ログの取得をお願いする場合がございます。
当該ログではトラブルシューティングに必要な各種情報について取得可能なため、非常に便利です。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/Windows-Server-EC2Rescue.html

EC2Rescue for Windows Server は、Amazon EC2 Windows Server インスタンス上で動作し、潜在的な問題の診断とトラブルシューティングを行うことができる使いやすいツールです。ログファイルを収集して問題を解決するだけでなく、問題がありそうな部分をプロアクティブに検索することができ、便利です。他のインスタンスから Amazon EBS ルートボリュームを調べて、そのボリュームを使用する Windows Server インスタンスをトラブルシューティングするために必要なログを収集することもできます。EC2Rescue が対処できる一般的な問題は次のとおりです。

・ファイアウォール、リモートデスクトッププロトコル (RDP)、またはネットワークインターフェイスの設定が原因で発生したインスタンス接続の問題
・停止エラー、起動ループ、またはレジストリの破損によって生じたオペレーティングシステムの起動に関する問題
・高度なログ分析とトラブルシューティングが必要な問題

今回は、AWS CLI コマンドを利用して Windows EC2 インスタンスから EC2Rescue ログ を S3 バケットへ取得してみたいと思います。
なお、ご紹介する AWS CLI コマンドから SSM Run Command を実行します。

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ssm/send-command.html

事前準備

以下の条件が必須です。

  • 対象 EC2 インスタンスがマネージドノードとして登録されている
  • EC2Rescue ログを保存する S3 バケットが存在する
  • 対象 EC2 インスタンスが AWS CLI コマンドで指定された S3 バケットにアクセスできる

今回は SSM のマネージドノードとして登録される方法について割愛させて頂きます。
AWS CLI コマンドで指定された S3 バケットにアクセス可能にする簡単な方法として、対象 EC2 インスタンスにアタッチしているロールに(例: AmazonSSMManagedInstanceCore)以下のポリシーを追加でアタッチしてください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket",
        "s3:PutObject"
      ],
      "Resource": "*"
    }
  ]
}

※ 適宜修正してください。

やってみた

本検証では Windows Server 2016 を搭載した EC2 インスタンスをマネージドノードとして登録されるように起動します。

001

今回は CloudShell を利用して AWS CLI コマンドを実行します。
検証用の S3 バケットも作成済みです。(my-s3-test-2024-12-01)

002

AWS CLI コマンド例
$ aws ssm send-command --instance-ids "i-xxxxxxxxxxxxxxx" --document-name "AWSSupport-RunEC2RescueForWindowsTool" --comment "EC2Rescue online log collection to S3" --parameters "Command=CollectLogs, Parameters='S3-Bucket-Name'" --output text

※ 適宜修正してください。

それでは、コマンドを実行します。

003

004

AWS CLI コマンド出力例
$ aws ssm send-command --instance-ids "i-011f530338ad1dd0d" --document-name "AWSSupport-RunEC2RescueForWindowsTool" --comment "EC2Rescue online log collection to S3" --parameters "Command=CollectLogs, Parameters='my-s3-test-2024-12-01'" --output text
COMMAND 19414ef3-9769-4280-98c5-39d37987524b    EC2Rescue online log collection to S3   0       0       AWSSupport-RunEC2RescueForWindowsTool   $DEFAULT        0       2024-12-01T16:48:11.268000+00:00        50      0                       ap-northeast-1  2024-12-01T13:48:11.268000+00:00             Pending Pending 1       3600
ALARMCONFIGURATION      False
CLOUDWATCHOUTPUTCONFIG          False
INSTANCEIDS     i-011f530338ad1dd0d
NOTIFICATIONCONFIG              
COMMAND CollectLogs
PARAMETERS      my-s3-test-2024-12-01

暫くしてから、EC2Rescue ログが取得されているか S3 バケットを確認します。
ありました。合わせてダウンロードして中身を確認します。
成功です!

005

006

まとめ

本ブログが誰かの参考になれば幸いです。

参考資料

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.